package cn.itsource.pethome.basic.service.impl;

import cn.itsource.pethome.basic.mapper.VerificationCodeMapper;
import cn.itsource.pethome.basic.service.IVerificationCodeService;
import cn.itsource.pethome.basic.util.AjaxResult;
import cn.itsource.pethome.basic.util.RedisUtils;
import cn.itsource.pethome.basic.util.StrUtils;
import cn.itsource.pethome.user.constant.PhoneConstant;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.UUID;

/**
 * @description: 描述:
 * @date: 2020/8/14 19:12
 * @author: summer
 * version: 1.0
 */
@Service
public class VerificationCodeServiceImpl implements IVerificationCodeService {

    @Autowired
    private VerificationCodeMapper verificationCodeMapper;

    /**
     * 发送验证码最基本的操作：
     *      1.生成验证码
     *      2.把生成的验证码放到redis中
     *      3.直接发送短信
     *
     * 细节：
     *      1.如果1分钟发送2次或者2次以上，我应该提示前端用户，不能重复发送验证码
     *      2.考虑网络延迟问题，只要你是1分钟以后，5分钟以内，再次点击按钮，我用的验证码不是新建的验证码，而是之前redis存储的验证码
     * @param phone  手机号码
     * @return
     */

    @Override
    public AjaxResult sendPhoneCode(String phone) {
        //在redis通过key把对应的验证码获取出来   iu78:34534534534534
        String value = RedisUtils.INSTANCE.get(PhoneConstant.PHONE_REG+":"+phone);
        //获取随机产生的验证码
        String code = StrUtils.getComplexRandomString(6);
        //判断value值是否为空，如果不为空，就证明redis存储的验证码还没有过期
        if(StringUtils.isNoneBlank(value)){
            //iu78:34534534534534  存储redis中验证码的格式
            String beforeTimer = value.split(":")[1];
            //获取当前时间戳
            long currentTimeMillis = System.currentTimeMillis();
            //判断1分钟以内是否发送了多次请求
            if(currentTimeMillis - Long.valueOf(beforeTimer) < 60*1000){
                return new AjaxResult(false, "不要重复发送验证码");
            }
            //iu78:34534534534534   (获取之前的验证码)==》超过了1分钟，并且依然在5分钟以内(使用之前的验证码)
            code = value.split(":")[0];
        }
        //把验证码存放到redis中     并且设置有效时间为5分钟
        RedisUtils.INSTANCE.set(PhoneConstant.PHONE_REG+":"+phone, code+":"+System.currentTimeMillis(), 5*60);
        //System.out.println("尊敬的用户，您的验证码为:"+code+",请在5分钟以内完成操作!!");
        //发送短信内容
        String text = "尊敬的用户，您的验证码为:" + code + ",请在5分钟以内完成操作!!";
        //发送短信
        //SmsUtil.sendPhoneCode(phone, text);
        System.out.println("验证码"+code);
        return new AjaxResult();
    }
}
